/*
 * BSP.h
 *
 *  Created on: 2025年10月18日
 *      Author: feng
 */

#ifndef ___BSP_H_
#define ___BSP_H_


#include <stdint.h>



#define Fault               1
#define NoFault      		    0


#define RS485				        0
#define WirelessSlave		    1
#define WirelessMaster		  2


#define SHT30				        0
#define SHT41				        1


#define AtpsSa				      0
#define AtpsOa				      1
#define AtpsRa				      2
#define AtpsMa				      3
#define AtpsExa				      4
#define AtpsRooma			      5
#define AtpsCoola			      6
#define AtpsHeata			      7
#define AtpsHuma			      8
#define AtpsPre				      9
#define AtpsRot				      10


#define Connect			        1
#define NoConnect			      0


#define STORAGE_NAMESPACE 					  "storage"

#define NVS_ModbusRtuSlaveParam 			"RtuSlaveParam"
#define NVS_WorkParam 						    "WorkParam"
#define NVS_AppParam 						      "AppParam"


#define ModbusRtuSlaveParamSaveFlag                	((uint32_t)0x01)
#define WorkParamSaveFlag                			      ((uint32_t)0x02)
#define AppParamSaveFlag                			      ((uint32_t)0x04)
#define FactoryResetFlag                 			      ((uint32_t)0x08)
#define SysResetFlag                     			      ((uint32_t)0x10)




#pragma pack(push, 1)
typedef struct {
    uint8_t Parity;           	/**MODBUS串口校验位: 0--无		1--奇校验		2--偶校验 */
    uint8_t StopBits;     	  	/**MODBUS串口停止位   */
    uint32_t Baudrate;			    /**MODBUS串口波特率   */
    uint16_t TxdDelay;			    /**MODBUS串口数据延时发送时间，单位：ms   */
    uint8_t T35Time;			      /**MODBUS t35时间，超过这个值，则判断为一帧数据接收完成，单位：ms   */
                                /**0--数据无效，由程序自动计算时间   */
                                /**其他数值--有效   */    
    
    uint8_t Sum;				        /**校验和   */     
} ModbusRtuSlaveParameter;
#pragma pack(pop)


#pragma pack(push, 1)
typedef struct {
   uint8_t WorkMode;        	/**ATPS工作模式：0--RS485通讯	1--无线从机		2--无线主机 */
   uint8_t NetId;           	/**无线网络ID */
   uint8_t NetChannel;        /**无线网络通道号 */
   uint8_t DeviceType;     		/**设备类型 */
   uint8_t SensorType;     		/**传感器类型 */
    
   uint8_t Sum;					/**校验和   */     
} WorkParameter;
#pragma pack(pop)


#pragma pack(push, 1)
typedef struct {
   uint32_t ResetCount;        	/**系统复位重启次数 */
   
   float AtpsSaTempCali;        /**送风温度校准，单位：℃ */
   float AtpsSaRhCali;     		/**送风相对湿度校准，单位：%  */
   
   float AtpsOaTempCali;        /**新风温度校准，单位：℃ */
   float AtpsOaRhCali;     		/**新风相对湿度校准，单位：%  */
   
   float AtpsRaTempCali;        /**回风温度校准，单位：℃ */
   float AtpsRaRhCali;     		/**回风相对湿度校准，单位：%  */
   
   float AtpsMaTempCali;        /**混风温度校准，单位：℃ */
   float AtpsMaRhCali;     		/**混风相对湿度校准，单位：%  */
   
   float AtpsExaTempCali;       /**排风温度校准，单位：℃ */
   float AtpsExaRhCali;     	/**排风相对湿度校准，单位：%  */
   
   float AtpsRoomaTempCali;     /**室内温度校准，单位：℃ */
   float AtpsRoomaRhCali;     	/**室内相对湿度校准，单位：%  */
   
   float AtpsCoolaTempCali;     /**表冷后温度校准，单位：℃ */
   float AtpsCoolaRhCali;     	/**表冷后相对湿度校准，单位：%  */
   
   float AtpsHeataTempCali;     /**加热后温度校准，单位：℃ */
   float AtpsHeataRhCali;     	/**加热后相对湿度校准，单位：%  */
   
   float AtpsHumaTempCali;      /**加湿后温度校准，单位：℃ */
   float AtpsHumaRhCali;     	/**加湿后相对湿度校准，单位：%  */
   
   float AtpsPreTempCali;       /**预处理后温度校准，单位：℃ */
   float AtpsPreRhCali;     	/**预处理后相对湿度校准，单位：%  */
   
   float AtpsRotTempCali;       /**转轮后温度校准，单位：℃ */
   float AtpsRotRhCali;     	/**转轮后相对湿度校准，单位：%  */
   
   float Atmosphere;            /**大气压值，单位：KPa  */
   
   uint16_t SamplingPeriod;		/**传感器数据采样时间间隔，单位：ms  */
   uint8_t AverageWindowSize;	/**移动平均窗口大小  */
   
   uint8_t Sum;					/**校验和   */     
} AppParameter;
#pragma pack(pop)


#pragma pack(push, 1)
typedef struct {
    
   ModbusRtuSlaveParameter ModbusRtuSlaveParam;			//MODBUS RTU从机配置信息
   WorkParameter WorkParam;								//工作模式配置信息
   AppParameter  AppParam;								//应用配置信息
} SystemParameter;
#pragma pack(pop)



#pragma pack(push, 1)
typedef struct {
	float TDB;                    	//干球温度
	float TDP;                    	//露点温度
	float TWB;                    	//湿球温度
	float HR;                     	//含湿量
	float RH;                    		//相对湿度
	float H;                      	//焓值
	
	uint8_t SensorFault;				    //温度传感器故障
	uint32_t SensorFaultCnt;    		//温度传感器累计故障次数
	
	uint8_t CommFault;              //无线通讯故障
	uint32_t CommFaultCnt;    		  //累计无线通讯故障次数
  uint32_t CommTimeoutCnt;        //无线通讯超时计数

  int16_t Rssi;                   //无线从机模式时，设备信号强度
} AtpsParameter;
#pragma pack(pop)


#pragma pack(push, 1)
typedef struct {
	uint8_t NVS_Fault;					    //NVS存储故障
  uint32_t SysRunTime;				    //系统累计运行时间，单位：s
  float ChipTemp;                 //芯片温度
	
	AtpsParameter AtpsSaParam;			//送风ATPS信息
	AtpsParameter AtpsOaParam;			//新风ATPS信息
	AtpsParameter AtpsRaParam;			//回风ATPS信息
	AtpsParameter AtpsMaParam;			//混风ATPS信息
	AtpsParameter AtpsExaParam;			//排风ATPS信息
	AtpsParameter AtpsRoomaParam;		//室内ATPS信息
	AtpsParameter AtpsCoolaParam;		//表冷后ATPS信息
	AtpsParameter AtpsHeataParam;		//加热后ATPS信息
	AtpsParameter AtpsHumaParam;		//加湿后ATPS信息
	AtpsParameter AtpsPreParam;			//预处理后ATPS信息
	AtpsParameter AtpsRotParam;			//转轮后ATPS信息
	
	uint8_t NetConnectFlag;				//无线从机模式时，网络连接标志。	0--失败		1--成功
} SystemState;
#pragma pack(pop)



/**
  * @brief  初始化系统功能外设
  * @param  None
  * @retval None
  */
void BSP_Init( void );



/**
	* @brief  保存参数信息
	* @param  none
	* @retval none
  */
void SysParamSave( void );



/**
  * @brief  系统复位处理
  * @param  none
  * @retval none
  */
void SysResetProcess( void );



/**
  * @brief  控制Led指示灯
  * @param  None
  * @retval None
  */
void LedCtrl( void );



/**
  * @brief  获取芯片的温度
  * @param  None
  * @retval None
  */
void ReadChipTemp( void );





#endif /* MAIN_BSP_H_ */
